Dont iterate the display if there's nothing to write
authorKristian Høgsberg <krh@bitplanet.net>
Thu, 6 Jan 2011 20:22:36 +0000 (15:22 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Sat, 5 Feb 2011 21:11:54 +0000 (16:11 -0500)
gdk/wayland/gdkdisplay-wayland.c
gdk/wayland/gdkeventsource.c
gdk/wayland/gdkprivate-wayland.h

index 378fbea135f8e28f5e0935f82055c308c9488392..86a36f07c3bd0ab131d749f5c7cc35a5b0024814 100644 (file)
@@ -490,8 +490,8 @@ gdk_wayland_display_flush (GdkDisplay *display)
   g_return_if_fail (GDK_IS_DISPLAY (display));
 
   if (!display->closed)
-    wl_display_iterate(GDK_DISPLAY_WAYLAND (display)->wl_display,
-                      WL_DISPLAY_WRITABLE);
+    _gdk_wayland_display_flush (display,
+                               GDK_DISPLAY_WAYLAND (display)->event_source);
 }
 
 static gboolean
index 12c9118201de46027f7d6b6425f16eca2c233b8e..553cc35804365e185796257a5d34c9d96990bbc6 100644 (file)
@@ -150,6 +150,16 @@ _gdk_wayland_display_event_source_new (GdkDisplay *display)
   return source;
 }
 
+void
+_gdk_wayland_display_flush (GdkDisplay *display, GSource *source)
+{
+  GdkWaylandEventSource *wayland_source = (GdkWaylandEventSource *) source;
+
+  while (wayland_source->mask & WL_DISPLAY_WRITABLE)
+    wl_display_iterate(GDK_DISPLAY_WAYLAND (display)->wl_display,
+                      WL_DISPLAY_WRITABLE);
+}
+
 void
 _gdk_wayland_display_queue_events (GdkDisplay *display)
 {
index fa3b27861e544402fa09084b85a8106835877547..ef13fea1baf66c519be2580172603d0e1d940c5d 100644 (file)
@@ -121,6 +121,7 @@ GdkDeviceManager *_gdk_device_manager_new (GdkDisplay *display);
 void     _gdk_wayland_display_deliver_event (GdkDisplay *display, GdkEvent *event);
 GSource *_gdk_wayland_display_event_source_new (GdkDisplay *display);
 void     _gdk_wayland_display_queue_events (GdkDisplay *display);
+void     _gdk_wayland_display_flush (GdkDisplay *display, GSource *source);
 
 GdkAppLaunchContext *_gdk_wayland_display_get_app_launch_context (GdkDisplay *display);